In some devices utilizing trusted execution environments, sensitive portions of an application may be executed and/or stored in a secure environment, called an enclave, to protect both code and data from compromise. An application such as a distributed ledger that supports private, smart contracts may use these enclaves to preserve confidentiality of the smart contract by encrypting the state of the contract within the enclave. To accomplish this, the enclave may generate encryption keys that can be saved in local, secured storage provided by a secure platform, such as Software Guard Extensions (SGX), in one example. However, for many applications (including most distributed ledgers) this approach is insufficient. Provisioning enclaves on a single server may create both a single point of failure (destroying the enclave or its keys prevents any future access to the contract and its state) and a bottleneck for performance. Thus, improved techniques that may not require a single provisioning server are desired.